//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2022 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if compiler(>=5.5.2) && canImport(_Concurrency)

import SotoCore

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension AlexaForBusiness {
    // MARK: Async API Calls

    /// Associates a skill with the organization under the customer's AWS account. If a skill is private, the user implicitly accepts access to this skill during enablement.
    public func approveSkill(_ input: ApproveSkillRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ApproveSkillResponse {
        return try await self.client.execute(operation: "ApproveSkill", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Associates a contact with a given address book.
    public func associateContactWithAddressBook(_ input: AssociateContactWithAddressBookRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> AssociateContactWithAddressBookResponse {
        return try await self.client.execute(operation: "AssociateContactWithAddressBook", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Associates a device with the specified network profile.
    public func associateDeviceWithNetworkProfile(_ input: AssociateDeviceWithNetworkProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> AssociateDeviceWithNetworkProfileResponse {
        return try await self.client.execute(operation: "AssociateDeviceWithNetworkProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Associates a device with a given room. This applies all the settings from the room profile to the device, and all the skills in any skill groups added to that room. This operation requires the device to be online, or else a manual sync is required.
    public func associateDeviceWithRoom(_ input: AssociateDeviceWithRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> AssociateDeviceWithRoomResponse {
        return try await self.client.execute(operation: "AssociateDeviceWithRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Associates a skill group with a given room. This enables all skills in the associated skill group on all devices in the room.
    public func associateSkillGroupWithRoom(_ input: AssociateSkillGroupWithRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> AssociateSkillGroupWithRoomResponse {
        return try await self.client.execute(operation: "AssociateSkillGroupWithRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Associates a skill with a skill group.
    public func associateSkillWithSkillGroup(_ input: AssociateSkillWithSkillGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> AssociateSkillWithSkillGroupResponse {
        return try await self.client.execute(operation: "AssociateSkillWithSkillGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Makes a private skill available for enrolled users to enable on their devices.
    public func associateSkillWithUsers(_ input: AssociateSkillWithUsersRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> AssociateSkillWithUsersResponse {
        return try await self.client.execute(operation: "AssociateSkillWithUsers", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates an address book with the specified details.
    public func createAddressBook(_ input: CreateAddressBookRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateAddressBookResponse {
        return try await self.client.execute(operation: "CreateAddressBook", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a recurring schedule for usage reports to deliver to the specified S3 location with a specified daily or weekly interval.
    public func createBusinessReportSchedule(_ input: CreateBusinessReportScheduleRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateBusinessReportScheduleResponse {
        return try await self.client.execute(operation: "CreateBusinessReportSchedule", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Adds a new conference provider under the user's AWS account.
    public func createConferenceProvider(_ input: CreateConferenceProviderRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateConferenceProviderResponse {
        return try await self.client.execute(operation: "CreateConferenceProvider", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a contact with the specified details.
    public func createContact(_ input: CreateContactRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateContactResponse {
        return try await self.client.execute(operation: "CreateContact", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a gateway group with the specified details.
    public func createGatewayGroup(_ input: CreateGatewayGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateGatewayGroupResponse {
        return try await self.client.execute(operation: "CreateGatewayGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a network profile with the specified details.
    public func createNetworkProfile(_ input: CreateNetworkProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateNetworkProfileResponse {
        return try await self.client.execute(operation: "CreateNetworkProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a new room profile with the specified details.
    public func createProfile(_ input: CreateProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateProfileResponse {
        return try await self.client.execute(operation: "CreateProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a room with the specified details.
    public func createRoom(_ input: CreateRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateRoomResponse {
        return try await self.client.execute(operation: "CreateRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a skill group with a specified name and description.
    public func createSkillGroup(_ input: CreateSkillGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateSkillGroupResponse {
        return try await self.client.execute(operation: "CreateSkillGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Creates a user.
    public func createUser(_ input: CreateUserRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> CreateUserResponse {
        return try await self.client.execute(operation: "CreateUser", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes an address book by the address book ARN.
    public func deleteAddressBook(_ input: DeleteAddressBookRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteAddressBookResponse {
        return try await self.client.execute(operation: "DeleteAddressBook", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes the recurring report delivery schedule with the specified schedule ARN.
    public func deleteBusinessReportSchedule(_ input: DeleteBusinessReportScheduleRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteBusinessReportScheduleResponse {
        return try await self.client.execute(operation: "DeleteBusinessReportSchedule", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a conference provider.
    public func deleteConferenceProvider(_ input: DeleteConferenceProviderRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteConferenceProviderResponse {
        return try await self.client.execute(operation: "DeleteConferenceProvider", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a contact by the contact ARN.
    public func deleteContact(_ input: DeleteContactRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteContactResponse {
        return try await self.client.execute(operation: "DeleteContact", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Removes a device from Alexa For Business.
    public func deleteDevice(_ input: DeleteDeviceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteDeviceResponse {
        return try await self.client.execute(operation: "DeleteDevice", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// When this action is called for a specified shared device, it allows authorized users to delete the device's entire previous history of voice input data and associated response data. This action can be called once every 24 hours for a specific shared device.
    public func deleteDeviceUsageData(_ input: DeleteDeviceUsageDataRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteDeviceUsageDataResponse {
        return try await self.client.execute(operation: "DeleteDeviceUsageData", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a gateway group.
    public func deleteGatewayGroup(_ input: DeleteGatewayGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteGatewayGroupResponse {
        return try await self.client.execute(operation: "DeleteGatewayGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a network profile by the network profile ARN.
    public func deleteNetworkProfile(_ input: DeleteNetworkProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteNetworkProfileResponse {
        return try await self.client.execute(operation: "DeleteNetworkProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a room profile by the profile ARN.
    public func deleteProfile(_ input: DeleteProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteProfileResponse {
        return try await self.client.execute(operation: "DeleteProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a room by the room ARN.
    public func deleteRoom(_ input: DeleteRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteRoomResponse {
        return try await self.client.execute(operation: "DeleteRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes room skill parameter details by room, skill, and parameter key ID.
    public func deleteRoomSkillParameter(_ input: DeleteRoomSkillParameterRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteRoomSkillParameterResponse {
        return try await self.client.execute(operation: "DeleteRoomSkillParameter", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Unlinks a third-party account from a skill.
    public func deleteSkillAuthorization(_ input: DeleteSkillAuthorizationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteSkillAuthorizationResponse {
        return try await self.client.execute(operation: "DeleteSkillAuthorization", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a skill group by skill group ARN.
    public func deleteSkillGroup(_ input: DeleteSkillGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteSkillGroupResponse {
        return try await self.client.execute(operation: "DeleteSkillGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Deletes a specified user by user ARN and enrollment ARN.
    public func deleteUser(_ input: DeleteUserRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DeleteUserResponse {
        return try await self.client.execute(operation: "DeleteUser", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disassociates a contact from a given address book.
    public func disassociateContactFromAddressBook(_ input: DisassociateContactFromAddressBookRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DisassociateContactFromAddressBookResponse {
        return try await self.client.execute(operation: "DisassociateContactFromAddressBook", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disassociates a device from its current room. The device continues to be connected to the Wi-Fi network and is still registered to the account. The device settings and skills are removed from the room.
    public func disassociateDeviceFromRoom(_ input: DisassociateDeviceFromRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DisassociateDeviceFromRoomResponse {
        return try await self.client.execute(operation: "DisassociateDeviceFromRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disassociates a skill from a skill group.
    public func disassociateSkillFromSkillGroup(_ input: DisassociateSkillFromSkillGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DisassociateSkillFromSkillGroupResponse {
        return try await self.client.execute(operation: "DisassociateSkillFromSkillGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Makes a private skill unavailable for enrolled users and prevents them from enabling it on their devices.
    public func disassociateSkillFromUsers(_ input: DisassociateSkillFromUsersRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DisassociateSkillFromUsersResponse {
        return try await self.client.execute(operation: "DisassociateSkillFromUsers", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disassociates a skill group from a specified room. This disables all skills in the skill group on all devices in the room.
    public func disassociateSkillGroupFromRoom(_ input: DisassociateSkillGroupFromRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> DisassociateSkillGroupFromRoomResponse {
        return try await self.client.execute(operation: "DisassociateSkillGroupFromRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Forgets smart home appliances associated to a room.
    public func forgetSmartHomeAppliances(_ input: ForgetSmartHomeAppliancesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ForgetSmartHomeAppliancesResponse {
        return try await self.client.execute(operation: "ForgetSmartHomeAppliances", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets address the book details by the address book ARN.
    public func getAddressBook(_ input: GetAddressBookRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetAddressBookResponse {
        return try await self.client.execute(operation: "GetAddressBook", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the existing conference preferences.
    public func getConferencePreference(_ input: GetConferencePreferenceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetConferencePreferenceResponse {
        return try await self.client.execute(operation: "GetConferencePreference", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets details about a specific conference provider.
    public func getConferenceProvider(_ input: GetConferenceProviderRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetConferenceProviderResponse {
        return try await self.client.execute(operation: "GetConferenceProvider", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets the contact details by the contact ARN.
    public func getContact(_ input: GetContactRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetContactResponse {
        return try await self.client.execute(operation: "GetContact", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets the details of a device by device ARN.
    public func getDevice(_ input: GetDeviceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetDeviceResponse {
        return try await self.client.execute(operation: "GetDevice", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the details of a gateway.
    public func getGateway(_ input: GetGatewayRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetGatewayResponse {
        return try await self.client.execute(operation: "GetGateway", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the details of a gateway group.
    public func getGatewayGroup(_ input: GetGatewayGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetGatewayGroupResponse {
        return try await self.client.execute(operation: "GetGatewayGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves the configured values for the user enrollment invitation email template.
    public func getInvitationConfiguration(_ input: GetInvitationConfigurationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetInvitationConfigurationResponse {
        return try await self.client.execute(operation: "GetInvitationConfiguration", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets the network profile details by the network profile ARN.
    public func getNetworkProfile(_ input: GetNetworkProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetNetworkProfileResponse {
        return try await self.client.execute(operation: "GetNetworkProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets the details of a room profile by profile ARN.
    public func getProfile(_ input: GetProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetProfileResponse {
        return try await self.client.execute(operation: "GetProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets room details by room ARN.
    public func getRoom(_ input: GetRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetRoomResponse {
        return try await self.client.execute(operation: "GetRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets room skill parameter details by room, skill, and parameter key ARN.
    public func getRoomSkillParameter(_ input: GetRoomSkillParameterRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetRoomSkillParameterResponse {
        return try await self.client.execute(operation: "GetRoomSkillParameter", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Gets skill group details by skill group ARN.
    public func getSkillGroup(_ input: GetSkillGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> GetSkillGroupResponse {
        return try await self.client.execute(operation: "GetSkillGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists the details of the schedules that a user configured. A download URL of the report associated with each schedule is returned every time this action is called. A new download URL is returned each time, and is valid for 24 hours.
    public func listBusinessReportSchedules(_ input: ListBusinessReportSchedulesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListBusinessReportSchedulesResponse {
        return try await self.client.execute(operation: "ListBusinessReportSchedules", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists conference providers under a specific AWS account.
    public func listConferenceProviders(_ input: ListConferenceProvidersRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListConferenceProvidersResponse {
        return try await self.client.execute(operation: "ListConferenceProviders", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists the device event history, including device connection status, for up to 30 days.
    public func listDeviceEvents(_ input: ListDeviceEventsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListDeviceEventsResponse {
        return try await self.client.execute(operation: "ListDeviceEvents", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves a list of gateway group summaries. Use GetGatewayGroup to retrieve details of a specific gateway group.
    public func listGatewayGroups(_ input: ListGatewayGroupsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListGatewayGroupsResponse {
        return try await self.client.execute(operation: "ListGatewayGroups", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Retrieves a list of gateway summaries. Use GetGateway to retrieve details of a specific gateway. An optional gateway group ARN can be provided to only retrieve gateway summaries of gateways that are associated with that gateway group ARN.
    public func listGateways(_ input: ListGatewaysRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListGatewaysResponse {
        return try await self.client.execute(operation: "ListGateways", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists all enabled skills in a specific skill group.
    public func listSkills(_ input: ListSkillsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListSkillsResponse {
        return try await self.client.execute(operation: "ListSkills", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists all categories in the Alexa skill store.
    public func listSkillsStoreCategories(_ input: ListSkillsStoreCategoriesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListSkillsStoreCategoriesResponse {
        return try await self.client.execute(operation: "ListSkillsStoreCategories", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists all skills in the Alexa skill store by category.
    public func listSkillsStoreSkillsByCategory(_ input: ListSkillsStoreSkillsByCategoryRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListSkillsStoreSkillsByCategoryResponse {
        return try await self.client.execute(operation: "ListSkillsStoreSkillsByCategory", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists all of the smart home appliances associated with a room.
    public func listSmartHomeAppliances(_ input: ListSmartHomeAppliancesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListSmartHomeAppliancesResponse {
        return try await self.client.execute(operation: "ListSmartHomeAppliances", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Lists all tags for the specified resource.
    public func listTags(_ input: ListTagsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ListTagsResponse {
        return try await self.client.execute(operation: "ListTags", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Sets the conference preferences on a specific conference provider at the account level.
    public func putConferencePreference(_ input: PutConferencePreferenceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> PutConferencePreferenceResponse {
        return try await self.client.execute(operation: "PutConferencePreference", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Configures the email template for the user enrollment invitation with the specified attributes.
    public func putInvitationConfiguration(_ input: PutInvitationConfigurationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> PutInvitationConfigurationResponse {
        return try await self.client.execute(operation: "PutInvitationConfiguration", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates room skill parameter details by room, skill, and parameter key ID. Not all skills have a room skill parameter.
    public func putRoomSkillParameter(_ input: PutRoomSkillParameterRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> PutRoomSkillParameterResponse {
        return try await self.client.execute(operation: "PutRoomSkillParameter", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Links a user's account to a third-party skill provider. If this API operation is called by an assumed IAM role, the skill being linked must be a private skill. Also, the skill must be owned by the AWS account that assumed the IAM role.
    public func putSkillAuthorization(_ input: PutSkillAuthorizationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> PutSkillAuthorizationResponse {
        return try await self.client.execute(operation: "PutSkillAuthorization", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Registers an Alexa-enabled device built by an Original Equipment Manufacturer (OEM) using Alexa Voice Service (AVS).
    public func registerAVSDevice(_ input: RegisterAVSDeviceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> RegisterAVSDeviceResponse {
        return try await self.client.execute(operation: "RegisterAVSDevice", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Disassociates a skill from the organization under a user's AWS account. If the skill is a private skill, it moves to an AcceptStatus of PENDING. Any private or public skill that is rejected can be added later by calling the ApproveSkill API.
    public func rejectSkill(_ input: RejectSkillRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> RejectSkillResponse {
        return try await self.client.execute(operation: "RejectSkill", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Determines the details for the room from which a skill request was invoked. This operation is used by skill developers. To query ResolveRoom from an Alexa skill, the skill ID needs to be authorized. When the skill is using an AWS Lambda function, the skill is automatically authorized when you publish your skill as a private skill to your AWS account. Skills that are hosted using a custom web service must be manually authorized. To get your skill authorized, contact AWS Support with your AWS account ID that queries the ResolveRoom API and skill ID.
    public func resolveRoom(_ input: ResolveRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> ResolveRoomResponse {
        return try await self.client.execute(operation: "ResolveRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Revokes an invitation and invalidates the enrollment URL.
    public func revokeInvitation(_ input: RevokeInvitationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> RevokeInvitationResponse {
        return try await self.client.execute(operation: "RevokeInvitation", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches address books and lists the ones that meet a set of filter and sort criteria.
    public func searchAddressBooks(_ input: SearchAddressBooksRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchAddressBooksResponse {
        return try await self.client.execute(operation: "SearchAddressBooks", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches contacts and lists the ones that meet a set of filter and sort criteria.
    public func searchContacts(_ input: SearchContactsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchContactsResponse {
        return try await self.client.execute(operation: "SearchContacts", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches devices and lists the ones that meet a set of filter criteria.
    public func searchDevices(_ input: SearchDevicesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchDevicesResponse {
        return try await self.client.execute(operation: "SearchDevices", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches network profiles and lists the ones that meet a set of filter and sort criteria.
    public func searchNetworkProfiles(_ input: SearchNetworkProfilesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchNetworkProfilesResponse {
        return try await self.client.execute(operation: "SearchNetworkProfiles", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches room profiles and lists the ones that meet a set of filter criteria.
    public func searchProfiles(_ input: SearchProfilesRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchProfilesResponse {
        return try await self.client.execute(operation: "SearchProfiles", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches rooms and lists the ones that meet a set of filter and sort criteria.
    public func searchRooms(_ input: SearchRoomsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchRoomsResponse {
        return try await self.client.execute(operation: "SearchRooms", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches skill groups and lists the ones that meet a set of filter and sort criteria.
    public func searchSkillGroups(_ input: SearchSkillGroupsRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchSkillGroupsResponse {
        return try await self.client.execute(operation: "SearchSkillGroups", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Searches users and lists the ones that meet a set of filter and sort criteria.
    public func searchUsers(_ input: SearchUsersRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SearchUsersResponse {
        return try await self.client.execute(operation: "SearchUsers", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Triggers an asynchronous flow to send text, SSML, or audio announcements to rooms that are identified by a search or filter.
    public func sendAnnouncement(_ input: SendAnnouncementRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SendAnnouncementResponse {
        return try await self.client.execute(operation: "SendAnnouncement", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Sends an enrollment invitation email with a URL to a user. The URL is valid for 30 days or until you call this operation again, whichever comes first.
    public func sendInvitation(_ input: SendInvitationRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> SendInvitationResponse {
        return try await self.client.execute(operation: "SendInvitation", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Resets a device and its account to the known default settings. This clears all information and settings set by previous users in the following ways:   Bluetooth - This unpairs all bluetooth devices paired with your echo device.   Volume - This resets the echo device's volume to the default value.   Notifications - This clears all notifications from your echo device.   Lists - This clears all to-do items from your echo device.   Settings - This internally syncs the room's profile (if the device is assigned to a room), contacts, address books, delegation access for account linking, and communications (if enabled on the room profile).
    public func startDeviceSync(_ input: StartDeviceSyncRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> StartDeviceSyncResponse {
        return try await self.client.execute(operation: "StartDeviceSync", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Initiates the discovery of any smart home appliances associated with the room.
    public func startSmartHomeApplianceDiscovery(_ input: StartSmartHomeApplianceDiscoveryRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> StartSmartHomeApplianceDiscoveryResponse {
        return try await self.client.execute(operation: "StartSmartHomeApplianceDiscovery", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Adds metadata tags to a specified resource.
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> TagResourceResponse {
        return try await self.client.execute(operation: "TagResource", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Removes metadata tags from a specified resource.
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UntagResourceResponse {
        return try await self.client.execute(operation: "UntagResource", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates address book details by the address book ARN.
    public func updateAddressBook(_ input: UpdateAddressBookRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateAddressBookResponse {
        return try await self.client.execute(operation: "UpdateAddressBook", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the configuration of the report delivery schedule with the specified schedule ARN.
    public func updateBusinessReportSchedule(_ input: UpdateBusinessReportScheduleRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateBusinessReportScheduleResponse {
        return try await self.client.execute(operation: "UpdateBusinessReportSchedule", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates an existing conference provider's settings.
    public func updateConferenceProvider(_ input: UpdateConferenceProviderRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateConferenceProviderResponse {
        return try await self.client.execute(operation: "UpdateConferenceProvider", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the contact details by the contact ARN.
    public func updateContact(_ input: UpdateContactRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateContactResponse {
        return try await self.client.execute(operation: "UpdateContact", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the device name by device ARN.
    public func updateDevice(_ input: UpdateDeviceRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateDeviceResponse {
        return try await self.client.execute(operation: "UpdateDevice", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the details of a gateway. If any optional field is not provided, the existing corresponding value is left unmodified.
    public func updateGateway(_ input: UpdateGatewayRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateGatewayResponse {
        return try await self.client.execute(operation: "UpdateGateway", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates the details of a gateway group. If any optional field is not provided, the existing corresponding value is left unmodified.
    public func updateGatewayGroup(_ input: UpdateGatewayGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateGatewayGroupResponse {
        return try await self.client.execute(operation: "UpdateGatewayGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates a network profile by the network profile ARN.
    public func updateNetworkProfile(_ input: UpdateNetworkProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateNetworkProfileResponse {
        return try await self.client.execute(operation: "UpdateNetworkProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates an existing room profile by room profile ARN.
    public func updateProfile(_ input: UpdateProfileRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateProfileResponse {
        return try await self.client.execute(operation: "UpdateProfile", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates room details by room ARN.
    public func updateRoom(_ input: UpdateRoomRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateRoomResponse {
        return try await self.client.execute(operation: "UpdateRoom", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }

    /// Updates skill group details by skill group ARN.
    public func updateSkillGroup(_ input: UpdateSkillGroupRequest, logger: Logger = AWSClient.loggingDisabled, on eventLoop: EventLoop? = nil) async throws -> UpdateSkillGroupResponse {
        return try await self.client.execute(operation: "UpdateSkillGroup", path: "/", httpMethod: .POST, serviceConfig: self.config, input: input, logger: logger, on: eventLoop)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension AlexaForBusiness {
    ///  Lists the details of the schedules that a user configured. A download URL of the report associated with each schedule is returned every time this action is called. A new download URL is returned each time, and is valid for 24 hours.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listBusinessReportSchedulesPaginator(
        _ input: ListBusinessReportSchedulesRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListBusinessReportSchedulesRequest, ListBusinessReportSchedulesResponse> {
        return .init(
            input: input,
            command: self.listBusinessReportSchedules,
            inputKey: \ListBusinessReportSchedulesRequest.nextToken,
            outputKey: \ListBusinessReportSchedulesResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Lists conference providers under a specific AWS account.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listConferenceProvidersPaginator(
        _ input: ListConferenceProvidersRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListConferenceProvidersRequest, ListConferenceProvidersResponse> {
        return .init(
            input: input,
            command: self.listConferenceProviders,
            inputKey: \ListConferenceProvidersRequest.nextToken,
            outputKey: \ListConferenceProvidersResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Lists the device event history, including device connection status, for up to 30 days.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listDeviceEventsPaginator(
        _ input: ListDeviceEventsRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListDeviceEventsRequest, ListDeviceEventsResponse> {
        return .init(
            input: input,
            command: self.listDeviceEvents,
            inputKey: \ListDeviceEventsRequest.nextToken,
            outputKey: \ListDeviceEventsResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Retrieves a list of gateway group summaries. Use GetGatewayGroup to retrieve details of a specific gateway group.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listGatewayGroupsPaginator(
        _ input: ListGatewayGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListGatewayGroupsRequest, ListGatewayGroupsResponse> {
        return .init(
            input: input,
            command: self.listGatewayGroups,
            inputKey: \ListGatewayGroupsRequest.nextToken,
            outputKey: \ListGatewayGroupsResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Retrieves a list of gateway summaries. Use GetGateway to retrieve details of a specific gateway. An optional gateway group ARN can be provided to only retrieve gateway summaries of gateways that are associated with that gateway group ARN.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listGatewaysPaginator(
        _ input: ListGatewaysRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListGatewaysRequest, ListGatewaysResponse> {
        return .init(
            input: input,
            command: self.listGateways,
            inputKey: \ListGatewaysRequest.nextToken,
            outputKey: \ListGatewaysResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Lists all enabled skills in a specific skill group.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listSkillsPaginator(
        _ input: ListSkillsRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListSkillsRequest, ListSkillsResponse> {
        return .init(
            input: input,
            command: self.listSkills,
            inputKey: \ListSkillsRequest.nextToken,
            outputKey: \ListSkillsResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Lists all categories in the Alexa skill store.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listSkillsStoreCategoriesPaginator(
        _ input: ListSkillsStoreCategoriesRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListSkillsStoreCategoriesRequest, ListSkillsStoreCategoriesResponse> {
        return .init(
            input: input,
            command: self.listSkillsStoreCategories,
            inputKey: \ListSkillsStoreCategoriesRequest.nextToken,
            outputKey: \ListSkillsStoreCategoriesResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Lists all skills in the Alexa skill store by category.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listSkillsStoreSkillsByCategoryPaginator(
        _ input: ListSkillsStoreSkillsByCategoryRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListSkillsStoreSkillsByCategoryRequest, ListSkillsStoreSkillsByCategoryResponse> {
        return .init(
            input: input,
            command: self.listSkillsStoreSkillsByCategory,
            inputKey: \ListSkillsStoreSkillsByCategoryRequest.nextToken,
            outputKey: \ListSkillsStoreSkillsByCategoryResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Lists all of the smart home appliances associated with a room.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listSmartHomeAppliancesPaginator(
        _ input: ListSmartHomeAppliancesRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListSmartHomeAppliancesRequest, ListSmartHomeAppliancesResponse> {
        return .init(
            input: input,
            command: self.listSmartHomeAppliances,
            inputKey: \ListSmartHomeAppliancesRequest.nextToken,
            outputKey: \ListSmartHomeAppliancesResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Lists all tags for the specified resource.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func listTagsPaginator(
        _ input: ListTagsRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<ListTagsRequest, ListTagsResponse> {
        return .init(
            input: input,
            command: self.listTags,
            inputKey: \ListTagsRequest.nextToken,
            outputKey: \ListTagsResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches address books and lists the ones that meet a set of filter and sort criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchAddressBooksPaginator(
        _ input: SearchAddressBooksRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchAddressBooksRequest, SearchAddressBooksResponse> {
        return .init(
            input: input,
            command: self.searchAddressBooks,
            inputKey: \SearchAddressBooksRequest.nextToken,
            outputKey: \SearchAddressBooksResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches contacts and lists the ones that meet a set of filter and sort criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchContactsPaginator(
        _ input: SearchContactsRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchContactsRequest, SearchContactsResponse> {
        return .init(
            input: input,
            command: self.searchContacts,
            inputKey: \SearchContactsRequest.nextToken,
            outputKey: \SearchContactsResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches devices and lists the ones that meet a set of filter criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchDevicesPaginator(
        _ input: SearchDevicesRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchDevicesRequest, SearchDevicesResponse> {
        return .init(
            input: input,
            command: self.searchDevices,
            inputKey: \SearchDevicesRequest.nextToken,
            outputKey: \SearchDevicesResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches network profiles and lists the ones that meet a set of filter and sort criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchNetworkProfilesPaginator(
        _ input: SearchNetworkProfilesRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchNetworkProfilesRequest, SearchNetworkProfilesResponse> {
        return .init(
            input: input,
            command: self.searchNetworkProfiles,
            inputKey: \SearchNetworkProfilesRequest.nextToken,
            outputKey: \SearchNetworkProfilesResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches room profiles and lists the ones that meet a set of filter criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchProfilesPaginator(
        _ input: SearchProfilesRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchProfilesRequest, SearchProfilesResponse> {
        return .init(
            input: input,
            command: self.searchProfiles,
            inputKey: \SearchProfilesRequest.nextToken,
            outputKey: \SearchProfilesResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches rooms and lists the ones that meet a set of filter and sort criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchRoomsPaginator(
        _ input: SearchRoomsRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchRoomsRequest, SearchRoomsResponse> {
        return .init(
            input: input,
            command: self.searchRooms,
            inputKey: \SearchRoomsRequest.nextToken,
            outputKey: \SearchRoomsResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches skill groups and lists the ones that meet a set of filter and sort criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchSkillGroupsPaginator(
        _ input: SearchSkillGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchSkillGroupsRequest, SearchSkillGroupsResponse> {
        return .init(
            input: input,
            command: self.searchSkillGroups,
            inputKey: \SearchSkillGroupsRequest.nextToken,
            outputKey: \SearchSkillGroupsResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }

    ///  Searches users and lists the ones that meet a set of filter and sort criteria.
    /// Return PaginatorSequence for operation.
    ///
    /// - Parameters:
    ///   - input: Input for request
    ///   - logger: Logger used flot logging
    ///   - eventLoop: EventLoop to run this process on
    public func searchUsersPaginator(
        _ input: SearchUsersRequest,
        logger: Logger = AWSClient.loggingDisabled,
        on eventLoop: EventLoop? = nil
    ) -> AWSClient.PaginatorSequence<SearchUsersRequest, SearchUsersResponse> {
        return .init(
            input: input,
            command: self.searchUsers,
            inputKey: \SearchUsersRequest.nextToken,
            outputKey: \SearchUsersResponse.nextToken,
            logger: logger,
            on: eventLoop
        )
    }
}

#endif // compiler(>=5.5.2) && canImport(_Concurrency)
